﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo04
{
    //定义一个结构体，名为PersonStruct，有三个成员变量：姓名、电话、地址，
    //在主方法中，创建一个PersonStruct结构体对象p1，为p1的成员变量赋值。
    //再声明一个PersonStruct结构体变量p2，把p1赋值给p2，改变p2的姓名，打印p1的内容。

    //定义一个类，名为PersonClass，有三个成员变量：姓名、电话、地址，
    //在主方法中，创建一个PersonClass对象p3，为p3的成员变量赋值。
    //再声明一个PersonClass变量p4，把p3赋值给p4，改变p4的姓名，打印p3的内容。

    //观察打印结果，并在在注释中，说下你对此的认识（它们为什么会这样？）
    //struct是值类型，存储在栈内存，传参数时是值传递，class是引用数据类型，实例化的对象在堆内存里，传参数时是引用传递

    struct PersonStruct
    {
        public string _name;
        public string _telphoneNum;
        public string _address;
    }
    class Program1
    {

        static void Main(string[] args)
        {
            PersonStruct p1 = new PersonStruct();
            p1._name = "nicola";
            p1._telphoneNum = "12345678910";
            p1._address = "玛丽港";

            PersonStruct p2 = new PersonStruct();
            p2 = p1;
            p2._name = "sue";
            Console.WriteLine($"姓名:{p1._name},电话{p1._telphoneNum},地址{p1._address}");

            PersonClass p3 = new PersonClass("rose", "9798613131631", "龙岩");
            PersonClass p4 = new PersonClass();
            p4 = p3;
            p4._name = "thallo";
            Console.WriteLine(p3);
        }
    }

    class PersonClass
    {
        public string _name;
        public string _telphoneNum;
        public string _address;

        public PersonClass(string name, string telphoneNum, string address)
        {
            _name = name;
            _telphoneNum = telphoneNum;
            _address = address;
        }

        public PersonClass()
        {
        }

        public override string ToString()
        {
            return $"姓名: { this._name},电话{ this._telphoneNum},地址{ this._address}";
        }
    }
}
